home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 21
/
Cream of the Crop 21 (Terry Blount) (October 1996).iso
/
doom
/
relwep12.zip
/
CBNMODS.QC
next >
Wrap
Text File
|
1996-08-20
|
7KB
|
198 lines
/*-------------------------------------------------------------------
Filename : cbnmods.qc
Author : Cameron Newham
Version : 1.2
Date : 96/08/20
Description
-----------
Provides routines specific to my patches. See the description
file that came with the archive for further details.
Public Entry Points
-------------------
CN_Missile_Bubbles
CN_Missile_Think
CN_Ditch_Rockets
--------------------------------------------------------------------*/
void() bubble_bob;
void() GrenadeExplode; //Needed for CN_Missile_Think
void(float num_bubbles) DeathBubbles;
/*-------------------------------------------------------------------
Slightly modified version of Id's DeathBubblesSpawn
--------------------------------------------------------------------*/
void() MissileBubblesSpawn =
{
local entity bubble;
bubble = spawn();
setmodel (bubble, "progs/s_bubble.spr");
setorigin (bubble, self.owner.origin);
bubble.movetype = MOVETYPE_NOCLIP;
bubble.solid = SOLID_NOT;
bubble.velocity = '0 0 15';
bubble.nextthink = time + 0.5;
bubble.think = bubble_bob;
bubble.classname = "bubble";
bubble.frame = 0;
bubble.cnt = 0;
setsize (bubble, '-8 -8 -8', '8 8 8');
self.nextthink = time + 0.1;
self.think = MissileBubblesSpawn;
self.air_finished = self.air_finished + 1;
if (self.air_finished >= self.bubble_count)
remove(self);
};
/*---------------------CN_Missile_Bubbles----------------------------
Makes an underwater entity look like a real underwater entity by
spraying out bubbles. This is designed for use with rockets.
--------------------------------------------------------------------*/
void(float num_bubbles) CN_Missile_Bubbles =
{
local vector rocket_origin;
local entity bubble_spawner;
//rocket_origin = self.origin + ('0 -50 -50');
bubble_spawner = spawn();
setorigin (bubble_spawner, self.origin + '0 0 -60');
bubble_spawner.movetype = MOVETYPE_NONE;
bubble_spawner.solid = SOLID_NOT;
bubble_spawner.nextthink = time + 0.1;
bubble_spawner.think = MissileBubblesSpawn;
bubble_spawner.air_finished = 0;
bubble_spawner.owner = self;
bubble_spawner.bubble_count = num_bubbles;
return;
};
/*----------------------CN_Missile_Think-----------------------------
Missile Velocity Correction.
Correct the velocity of spikes, rockets and grenades underwater.
Simulates water resistance. Also calls CN_Missile_Bubbles for rockets
underwater. Rockets are slowed in water and speed up again in air,
while grenades are slowed by each passage through water.
--------------------------------------------------------------------*/
void() CN_Missile_Think =
{
local vector v1;
local vector v2;
// if it's a grenade then we must make it explode after
// it's duration expires
if ((self.classname == "grenade") && (time > self.duration))
{
// this is a grenade and it's past its use-by date
self.think = GrenadeExplode;
self.nextthink = time + 0.1;
}
else
if (self.duration < time)
self.think = SUB_Remove;
else
{
self.nextthink = time + 0.1;
v1 = self.origin;
v2 = v1;
traceline (v1, v2, TRUE, self);
if (trace_inwater == TRUE)
{
if ((random() > 0.72) && (self.classname == "rocket"))
CN_Missile_Bubbles(1);
if (self.jump_flag == FALSE)
{
// correct velocity underwater if not underwater
// (jump_flag) already.
self.jump_flag = TRUE; // now in water
self.swim_flag = TRUE; // water->air transition not done
self.velocity = self.velocity * 0.4292;
self.angles = vectoangles(self.velocity);
}
}
else
{
// make sure we only do this for 1 water/surf transition
if (self.swim_flag == TRUE)
{
if (self.classname == "rocket")
{
// correct velocity out of water for rockets
self.velocity = self.velocity * 2.33;
}
self.jump_flag = FALSE; //out of water
self.swim_flag = FALSE; //water->air transition finished
}
}
}
};
/*------------------------CN_Ditch_Rockets---------------------------
Removes half your rockets, places them in a backpack and ejects
it to the world. You'll need this for when you get too many rockets
and get weighed down.
--------------------------------------------------------------------*/
void() CN_Ditch_Rockets =
{
local entity back_pack;
local float num_to_ditch;
// if we have none or one then return!
if (self.ammo_rockets < 2)
return;
// spawn a backpack
back_pack = spawn();
// calculate number to ditch and set appropriate amounts
// for entity and backpack
num_to_ditch = self.ammo_rockets / 2;
num_to_ditch = floor(num_to_ditch);
back_pack.ammo_rockets = num_to_ditch;
self.ammo_rockets = self.ammo_rockets - num_to_ditch;
back_pack.owner = self;
makevectors(self.v_angle);
setorigin(back_pack, self.origin + '0 0 45');
back_pack.velocity = aim(self, 1000);
back_pack.velocity_x = back_pack.velocity_x * -340;
back_pack.velocity_y = back_pack.velocity_y * -340;
back_pack.velocity_z = back_pack.velocity_z * 380;
back_pack.angles = vectoangles(back_pack.velocity);
back_pack.flags = FL_ITEM;
back_pack.solid = SOLID_TRIGGER;
back_pack.movetype = MOVETYPE_TOSS;
back_pack.nextthink = time + 0.2;
setmodel (back_pack, "progs/backpack.mdl");
setsize(back_pack, '-16 -16 0', '16 16 56');
back_pack.touch = BackpackTouch;
back_pack.nextthink = time + 120; // remove pack after 120 secs
back_pack.think = SUB_Remove;
sprint(self, "Dumped Rockets\n");
W_SetCurrentAmmo();
};
/*--------------------CN_Client_Init_Think---------------------------
Startup messages
--------------------------------------------------------------------*/
void() CN_Client_Init_Think =
{
sprint (self, "Realistic Weapons Mod by C. Newham (w_australia)\n");
sprint (self, "Version 1.2\n");
sprint (self, "* weapons unreliable\n");
sprint (self, "* rockets add weight\n");
sprint (self, "* recoil effects\n");
sprint (self, "* 200pc health speed increase\n");
sprint (self, "* impulse 20 - dump rockets\n");
};